package com.haiya.common.response;


import com.haiya.common.response.api.CodeInterface;

/**
 * 海涯平台响应码枚举类
 *
 * 10000-- 通用错误代码
 * 20000-- 成功
 * 22000-- 媒资错误代码
 * 23000-- 用户中心错误代码
 * 24000-- cms错误代码
 * 25000-- 文件系统
 * 30000-- 发生异常
 * 50000-- 服务器错误
 *
 * @author qiaoguoqiang
 */
public enum ResCodeEnum implements CodeInterface {
    /**
     * 成功
     */
    SUCCESS(true, 20000, "操作成功！"),
    /**
     * 未登陆
     */
    UNAUTHENTICATED(false, 10001, "此操作需要登陆系统！"),
    /**
     * 无权限
     */
    UNAUTHORISE(false, 10002, "权限不足，无权操作！"),
    /**
     * 非法参数
     */
    ARGS_ERROR(false,10003,"参数错误！"),

    /**
     * 非法参数
     */
    INVALID_PARAM(false,10004,"非法参数！"),

    /**
     * 非法参数
     */
    UNSUPPORTED_GRANT_TYPE(false,10005,"Unsupported grant type！"),

    /**
     * 非法参数
     */
    ILLEGAL_PARAM(false,10006,"参数解析失败！"),

    /**
     * 不支持当前媒体类型
     */
    MEDIA_TYPE_ERROR(false,10007,"不支持当前媒体类型！"),
    /**
     * 不支持当前请求方法
     */
    REQUEST_METHOD_ERROR(false,10008,"不支持当前请求方法！"),

    /**
     * 操作失败
     */
    FAIL(false, 11111, "操作失败！"),


    /**
     * 微服务内发生异常
     */
    EXCEPTION(false, 30000, "发生异常！"),

    /**
     * 拒绝访问
     */
    FORBIDDEN(false,40300,"拒绝访问！"),

    /**
     * 实体不存在
     */
    ENTITY_NOT_FOUND(false,40400,"实体不存在！"),


    /**
     * 操作失败
     */
    BUSINESS_ERROR(false, 50000, "业务异常！"),


    /**
     * 操作失败
     */
    SQL_ERROR(false, 50010, "服务运行SQLException异常！"),

    /**
     * 操作失败
     */
    IDEMPOTENCY_ERROR(false, 50020, "原子操作异常！"),

    /**
     * 未知错误
     */
    UNKNOWN_ERROR(false, 51111, "未知错误"),

    /**
     * 网关调用下游，下游服务异常
     */
    DOWNSTREAM_ERROR(false, 50030, "下游节点异常"),

    /**
     * 系统繁忙
     */
    SERVER_ERROR(false, 99999, "抱歉，系统繁忙，请稍后重试！");

    /**
     * 操作是否成功
     */
    boolean success;

    /**
     * 操作响应码
     */
    int code;

    /**
     * 提示信息
     */
    String msg;

    ResCodeEnum(boolean success, int code, String msg) {
        this.success = success;
        this.code = code;
        this.msg = msg;
    }

    @Override
    public boolean success() {
        return success;
    }

    @Override
    public int code() {
        return code;
    }

    @Override
    public String msg() {
        return msg;
    }
}
